package com.gem.day08;

/**
 * 
 * 本类用来演示Java抽象类
 * 
 * 抽象关键字:abstract
 * 修饰类表示该类是一个抽象类,修饰方法表示该方法是一个抽象方法
 * 
 * 注意:
 * 1.abstract不能和private共存,原因:private表示私有化,不能被重写,abstract天生使用来被重写
 * 2.abstract不能和final共存,原因:final修饰类或者方法表示不能被继承或者不能被重写,abstract天生使用来被重写
 * 3.abstract不能和static共存,原因:abstract是和对象相关的,而static无需创建对象
 * 
 * 补充: main方法为什么是static的?
 * 
 * 抽象类的特点:
 * 1.类上用abstract修饰
 * 2.抽象类不能被实例化,所以它天生是用来被继承的
 * 3.抽象类中可以有属性,构造,普通方法(同非抽象类),
 *    也可以有抽象方法(非抽象类不可以)
 *    注意:
 *    如果一个类中有抽象方法,则这个类一定是抽象类,
 *    如果一个类是抽象类,它不一定有抽象方法的!
 * 4.一个类如果继承了一个抽象类,则必须强制重写该抽象父类中所有的抽象方法,
 *    除非这个子类也是抽象类  
 * 
 * 抽象方法的特点:
 * 1.方法修饰符abstract,以;结束,没有方法体
 * 2.抽象方法不能被直接调用,应该被子类重写后再调用
 * 3.抽象方法天生使用来被重写的
 * 
 * @author easonsy
 * 2020年7月27日 上午8:53:43
 */
/**交通工具父类*/
public abstract class Vehicle {
	private String band;
	private String type;
	private double price;

	public Vehicle() {

	}

	public Vehicle(String band, String type, double price) {
		super();
		this.band = band;
		this.type = type;
		this.price = price;
	}

	public String getBand() {
		return band;
	}

	public void setBand(String band) {
		this.band = band;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	/**
	 * 移动方法
	 * 注意:由于此方法没有方法体,所以Java中要求设置成抽象方法
	 */
	public abstract void move();

	@Override
	public String toString() {
		return "Vechile [band=" + band + ", type=" + type + ", price=" + price + "]";
	}
}
